1 // DerelictCL - a Derelict based dynamic binding for OpenCL 2 // written in the D programming language 3 // 4 // Copyright: MeinMein 2013-2014. 5 // License: Boost License 1.0 6 // (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 // Authors: Gerbrand Kamphuis (meinmein.com), 9 // Marvin Meeng (meinmein.com). 10 module derelict.opencl.constants; 11 12 import derelict.opencl.types; 13 14 // cl.h 15 16 // Error Codes 17 enum 18 { 19 CL_SUCCESS = 0, 20 CL_DEVICE_NOT_FOUND = -1, 21 CL_DEVICE_NOT_AVAILABLE = -2, 22 CL_COMPILER_NOT_AVAILABLE = -3, 23 CL_MEM_OBJECT_ALLOCATION_FAILURE = -4, 24 CL_OUT_OF_RESOURCES = -5, 25 CL_OUT_OF_HOST_MEMORY = -6, 26 CL_PROFILING_INFO_NOT_AVAILABLE = -7, 27 CL_MEM_COPY_OVERLAP = -8, 28 CL_IMAGE_FORMAT_MISMATCH = -9, 29 CL_IMAGE_FORMAT_NOT_SUPPORTED = -10, 30 CL_BUILD_PROGRAM_FAILURE = -11, 31 CL_MAP_FAILURE = -12, 32 CL_MISALIGNED_SUB_BUFFER_OFFSET = -13, 33 CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST= -14, 34 CL_COMPILE_PROGRAM_FAILURE = -15, 35 CL_LINKER_NOT_AVAILABLE = -16, 36 CL_LINK_PROGRAM_FAILURE = -17, 37 CL_DEVICE_PARTITION_FAILED = -18, 38 CL_KERNEL_ARG_INFO_NOT_AVAILABLE = -19, 39 40 CL_INVALID_VALUE = -30, 41 CL_INVALID_DEVICE_TYPE = -31, 42 CL_INVALID_PLATFORM = -32, 43 CL_INVALID_DEVICE = -33, 44 CL_INVALID_CONTEXT = -34, 45 CL_INVALID_QUEUE_PROPERTIES = -35, 46 CL_INVALID_COMMAND_QUEUE = -36, 47 CL_INVALID_HOST_PTR = -37, 48 CL_INVALID_MEM_OBJECT = -38, 49 CL_INVALID_IMAGE_FORMAT_DESCRIPTOR = -39, 50 CL_INVALID_IMAGE_SIZE = -40, 51 CL_INVALID_SAMPLER = -41, 52 CL_INVALID_BINARY = -42, 53 CL_INVALID_BUILD_OPTIONS = -43, 54 CL_INVALID_PROGRAM = -44, 55 CL_INVALID_PROGRAM_EXECUTABLE = -45, 56 CL_INVALID_KERNEL_NAME = -46, 57 CL_INVALID_KERNEL_DEFINITION = -47, 58 CL_INVALID_KERNEL = -48, 59 CL_INVALID_ARG_INDEX = -49, 60 CL_INVALID_ARG_VALUE = -50, 61 CL_INVALID_ARG_SIZE = -51, 62 CL_INVALID_KERNEL_ARGS = -52, 63 CL_INVALID_WORK_DIMENSION = -53, 64 CL_INVALID_WORK_GROUP_SIZE = -54, 65 CL_INVALID_WORK_ITEM_SIZE = -55, 66 CL_INVALID_GLOBAL_OFFSET = -56, 67 CL_INVALID_EVENT_WAIT_LIST = -57, 68 CL_INVALID_EVENT = -58, 69 CL_INVALID_OPERATION = -59, 70 CL_INVALID_GL_OBJECT = -60, 71 CL_INVALID_BUFFER_SIZE = -61, 72 CL_INVALID_MIP_LEVEL = -62, 73 CL_INVALID_GLOBAL_WORK_SIZE = -63, 74 CL_INVALID_PROPERTY = -64, 75 CL_INVALID_IMAGE_DESCRIPTOR = -65, 76 CL_INVALID_COMPILER_OPTIONS = -66, 77 CL_INVALID_LINKER_OPTIONS = -67, 78 CL_INVALID_DEVICE_PARTITION_COUNT = -68, 79 } 80 81 // cl_bool 82 enum 83 { 84 CL_FALSE = 0, 85 CL_TRUE = 1, 86 CL_BLOCKING = CL_TRUE, 87 CL_NON_BLOCKING = CL_FALSE 88 } 89 90 // cl_platform_info 91 enum 92 { 93 CL_PLATFORM_PROFILE = 0x0900, 94 CL_PLATFORM_VERSION = 0x0901, 95 CL_PLATFORM_NAME = 0x0902, 96 CL_PLATFORM_VENDOR = 0x0903, 97 CL_PLATFORM_EXTENSIONS = 0x0904, 98 } 99 100 // cl_device_type - bitfield 101 enum : cl_bitfield 102 { 103 CL_DEVICE_TYPE_DEFAULT = (1 << 0), 104 CL_DEVICE_TYPE_CPU = (1 << 1), 105 CL_DEVICE_TYPE_GPU = (1 << 2), 106 CL_DEVICE_TYPE_ACCELERATOR = (1 << 3), 107 CL_DEVICE_TYPE_CUSTOM = (1 << 4), 108 CL_DEVICE_TYPE_ALL = 0xFFFFFFFF, 109 } 110 111 // cl_device_info 112 enum 113 { 114 CL_DEVICE_TYPE = 0x1000, 115 CL_DEVICE_VENDOR_ID = 0x1001, 116 CL_DEVICE_MAX_COMPUTE_UNITS = 0x1002, 117 CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 0x1003, 118 CL_DEVICE_MAX_WORK_GROUP_SIZE = 0x1004, 119 CL_DEVICE_MAX_WORK_ITEM_SIZES = 0x1005, 120 CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR = 0x1006, 121 CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT = 0x1007, 122 CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT = 0x1008, 123 CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG = 0x1009, 124 CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT = 0x100A, 125 CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE = 0x100B, 126 CL_DEVICE_MAX_CLOCK_FREQUENCY = 0x100C, 127 CL_DEVICE_ADDRESS_BITS = 0x100D, 128 CL_DEVICE_MAX_READ_IMAGE_ARGS = 0x100E, 129 CL_DEVICE_MAX_WRITE_IMAGE_ARGS = 0x100F, 130 CL_DEVICE_MAX_MEM_ALLOC_SIZE = 0x1010, 131 CL_DEVICE_IMAGE2D_MAX_WIDTH = 0x1011, 132 CL_DEVICE_IMAGE2D_MAX_HEIGHT = 0x1012, 133 CL_DEVICE_IMAGE3D_MAX_WIDTH = 0x1013, 134 CL_DEVICE_IMAGE3D_MAX_HEIGHT = 0x1014, 135 CL_DEVICE_IMAGE3D_MAX_DEPTH = 0x1015, 136 CL_DEVICE_IMAGE_SUPPORT = 0x1016, 137 CL_DEVICE_MAX_PARAMETER_SIZE = 0x1017, 138 CL_DEVICE_MAX_SAMPLERS = 0x1018, 139 CL_DEVICE_MEM_BASE_ADDR_ALIGN = 0x1019, 140 CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE = 0x101A, // Deprecated in OpenCl 1.2 141 CL_DEVICE_SINGLE_FP_CONFIG = 0x101B, 142 CL_DEVICE_GLOBAL_MEM_CACHE_TYPE = 0x101C, 143 CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE = 0x101D, 144 CL_DEVICE_GLOBAL_MEM_CACHE_SIZE = 0x101E, 145 CL_DEVICE_GLOBAL_MEM_SIZE = 0x101F, 146 CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE = 0x1020, 147 CL_DEVICE_MAX_CONSTANT_ARGS = 0x1021, 148 CL_DEVICE_LOCAL_MEM_TYPE = 0x1022, 149 CL_DEVICE_LOCAL_MEM_SIZE = 0x1023, 150 CL_DEVICE_ERROR_CORRECTION_SUPPORT = 0x1024, 151 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 0x1025, 152 CL_DEVICE_ENDIAN_LITTLE = 0x1026, 153 CL_DEVICE_AVAILABLE = 0x1027, 154 CL_DEVICE_COMPILER_AVAILABLE = 0x1028, 155 CL_DEVICE_EXECUTION_CAPABILITIES = 0x1029, 156 CL_DEVICE_QUEUE_PROPERTIES = 0x102A, 157 CL_DEVICE_NAME = 0x102B, 158 CL_DEVICE_VENDOR = 0x102C, 159 CL_DRIVER_VERSION = 0x102D, 160 CL_DEVICE_PROFILE = 0x102E, 161 CL_DEVICE_VERSION = 0x102F, 162 CL_DEVICE_EXTENSIONS = 0x1030, 163 CL_DEVICE_PLATFORM = 0x1031, 164 CL_DEVICE_DOUBLE_FP_CONFIG = 0x1032, 165 // 0x1033 reserved for CL_DEVICE_HALF_FP_CONFIG 166 CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF = 0x1034, 167 CL_DEVICE_HOST_UNIFIED_MEMORY = 0x1035, 168 CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR = 0x1036, 169 CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT = 0x1037, 170 CL_DEVICE_NATIVE_VECTOR_WIDTH_INT = 0x1038, 171 CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG = 0x1039, 172 CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT = 0x103A, 173 CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE = 0x103B, 174 CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF = 0x103C, 175 CL_DEVICE_OPENCL_C_VERSION = 0x103D, 176 CL_DEVICE_LINKER_AVAILABLE = 0x103E, 177 CL_DEVICE_BUILT_IN_KERNELS = 0x103F, 178 CL_DEVICE_IMAGE_MAX_BUFFER_SIZE = 0x1040, 179 CL_DEVICE_IMAGE_MAX_ARRAY_SIZE = 0x1041, 180 CL_DEVICE_PARENT_DEVICE = 0x1042, 181 CL_DEVICE_PARTITION_MAX_SUB_DEVICES = 0x1043, 182 CL_DEVICE_PARTITION_PROPERTIES = 0x1044, 183 CL_DEVICE_PARTITION_AFFINITY_DOMAIN = 0x1045, 184 CL_DEVICE_PARTITION_TYPE = 0x1046, 185 CL_DEVICE_REFERENCE_COUNT = 0x1047, 186 CL_DEVICE_PREFERRED_INTEROP_USER_SYNC = 0x1048, 187 CL_DEVICE_PRINTF_BUFFER_SIZE = 0x1049, 188 } 189 190 // cl_device_fp_config 191 enum : cl_bitfield 192 { 193 CL_FP_DENORM = (1 << 0), 194 CL_FP_INF_NAN = (1 << 1), 195 CL_FP_ROUND_TO_NEAREST = (1 << 2), 196 CL_FP_ROUND_TO_ZERO = (1 << 3), 197 CL_FP_ROUND_TO_INF = (1 << 4), 198 CL_FP_FMA = (1 << 5), 199 CL_FP_SOFT_FLOAT = (1 << 6), 200 CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT = (1 << 7), 201 } 202 203 // cl_device_mem_cache_type 204 enum 205 { 206 CL_NONE = 0x0, 207 CL_READ_ONLY_CACHE = 0x1, 208 CL_READ_WRITE_CACHE = 0x2, 209 } 210 211 // cl_device_local_mem_type 212 enum 213 { 214 CL_LOCAL = 0x1, 215 CL_GLOBAL = 0x2, 216 } 217 218 // cl_device_exec_capabilities 219 enum : cl_bitfield 220 { 221 CL_EXEC_KERNEL = (1 << 0), 222 CL_EXEC_NATIVE_KERNEL = (1 << 1), 223 } 224 225 // cl_command_queue_properties 226 enum : cl_bitfield 227 { 228 CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE = (1 << 0), 229 CL_QUEUE_PROFILING_ENABLE = (1 << 1), 230 } 231 232 // cl_context_info 233 enum 234 { 235 CL_CONTEXT_REFERENCE_COUNT = 0x1080, 236 CL_CONTEXT_DEVICES = 0x1081, 237 CL_CONTEXT_PROPERTIES = 0x1082, 238 CL_CONTEXT_NUM_DEVICES = 0x1083, 239 } 240 241 // cl_context_properties 242 enum 243 { 244 CL_CONTEXT_PLATFORM = 0x1084, 245 CL_CONTEXT_INTEROP_USER_SYNC = 0x1085, 246 } 247 248 // cl_device_partition_property 249 enum : ptrdiff_t 250 { 251 CL_DEVICE_PARTITION_EQUALLY = 0x1086, 252 CL_DEVICE_PARTITION_BY_COUNTS = 0x1087, 253 CL_DEVICE_PARTITION_BY_COUNTS_LIST_END = 0x0, 254 CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN = 0x1088, 255 } 256 257 // cl_device_affinity_domain 258 enum : cl_bitfield 259 { 260 CL_DEVICE_AFFINITY_DOMAIN_NUMA = (1 << 0), 261 CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE = (1 << 1), 262 CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE = (1 << 2), 263 CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE = (1 << 3), 264 CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE = (1 << 4), 265 CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE = (1 << 5), 266 } 267 268 // cl_command_queue_info 269 enum 270 { 271 CL_QUEUE_CONTEXT = 0x1090, 272 CL_QUEUE_DEVICE = 0x1091, 273 CL_QUEUE_REFERENCE_COUNT = 0x1092, 274 CL_QUEUE_PROPERTIES = 0x1093, 275 } 276 277 // cl_mem_flags - bitfield 278 enum : cl_bitfield 279 { 280 CL_MEM_READ_WRITE = (1 << 0), 281 CL_MEM_WRITE_ONLY = (1 << 1), 282 CL_MEM_READ_ONLY = (1 << 2), 283 CL_MEM_USE_HOST_PTR = (1 << 3), 284 CL_MEM_ALLOC_HOST_PTR = (1 << 4), 285 CL_MEM_COPY_HOST_PTR = (1 << 5), 286 // reserved = (1 << 6), 287 CL_MEM_HOST_WRITE_ONLY = (1 << 7), 288 CL_MEM_HOST_READ_ONLY = (1 << 8), 289 CL_MEM_HOST_NO_ACCESS = (1 << 9), 290 } 291 292 // cl_mem_migration_flags 293 enum : cl_bitfield 294 { 295 CL_MIGRATE_MEM_OBJECT_HOST = (1 << 0), 296 CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED = (1 << 1), 297 } 298 299 // cl_channel_order 300 enum 301 { 302 CL_R = 0x10B0, 303 CL_A = 0x10B1, 304 CL_RG = 0x10B2, 305 CL_RA = 0x10B3, 306 CL_RGB = 0x10B4, 307 CL_RGBA = 0x10B5, 308 CL_BGRA = 0x10B6, 309 CL_ARGB = 0x10B7, 310 CL_INTENSITY = 0x10B8, 311 CL_LUMINANCE = 0x10B9, 312 CL_Rx = 0x10BA, 313 CL_RGx = 0x10BB, 314 CL_RGBx = 0x10BC, 315 CL_DEPTH = 0x10BD, 316 CL_DEPTH_STENCIL = 0x10BE, 317 } 318 319 // cl_channel_type 320 enum 321 { 322 CL_SNORM_INT8 = 0x10D0, 323 CL_SNORM_INT16 = 0x10D1, 324 CL_UNORM_INT8 = 0x10D2, 325 CL_UNORM_INT16 = 0x10D3, 326 CL_UNORM_SHORT_565 = 0x10D4, 327 CL_UNORM_SHORT_555 = 0x10D5, 328 CL_UNORM_INT_101010 = 0x10D6, 329 CL_SIGNED_INT8 = 0x10D7, 330 CL_SIGNED_INT16 = 0x10D8, 331 CL_SIGNED_INT32 = 0x10D9, 332 CL_UNSIGNED_INT8 = 0x10DA, 333 CL_UNSIGNED_INT16 = 0x10DB, 334 CL_UNSIGNED_INT32 = 0x10DC, 335 CL_HALF_FLOAT = 0x10DD, 336 CL_FLOAT = 0x10DE, 337 CL_UNORM_INT24 = 0x10DF, 338 } 339 340 // cl_mem_object_type 341 enum 342 { 343 CL_MEM_OBJECT_BUFFER = 0x10F0, 344 CL_MEM_OBJECT_IMAGE2D = 0x10F1, 345 CL_MEM_OBJECT_IMAGE3D = 0x10F2, 346 CL_MEM_OBJECT_IMAGE2D_ARRAY = 0x10F3, 347 CL_MEM_OBJECT_IMAGE1D = 0x10F4, 348 CL_MEM_OBJECT_IMAGE1D_ARRAY = 0x10F5, 349 CL_MEM_OBJECT_IMAGE1D_BUFFER = 0x10F6, 350 } 351 352 // cl_mem_info 353 enum 354 { 355 CL_MEM_TYPE = 0x1100, 356 CL_MEM_FLAGS = 0x1101, 357 CL_MEM_SIZE = 0x1102, 358 CL_MEM_HOST_PTR = 0x1103, 359 CL_MEM_MAP_COUNT = 0x1104, 360 CL_MEM_REFERENCE_COUNT = 0x1105, 361 CL_MEM_CONTEXT = 0x1106, 362 CL_MEM_ASSOCIATED_MEMOBJECT = 0x1107, 363 CL_MEM_OFFSET = 0x1108, 364 } 365 366 // cl_image_info 367 enum 368 { 369 CL_IMAGE_FORMAT = 0x1110, 370 CL_IMAGE_ELEMENT_SIZE = 0x1111, 371 CL_IMAGE_ROW_PITCH = 0x1112, 372 CL_IMAGE_SLICE_PITCH = 0x1113, 373 CL_IMAGE_WIDTH = 0x1114, 374 CL_IMAGE_HEIGHT = 0x1115, 375 CL_IMAGE_DEPTH = 0x1116, 376 CL_IMAGE_ARRAY_SIZE = 0x1117, 377 CL_IMAGE_BUFFER = 0x1118, 378 CL_IMAGE_NUM_MIP_LEVELS = 0x1119, 379 CL_IMAGE_NUM_SAMPLES = 0x111A, 380 } 381 382 // cl_addressing_mode 383 enum 384 { 385 CL_ADDRESS_NONE = 0x1130, 386 CL_ADDRESS_CLAMP_TO_EDGE = 0x1131, 387 CL_ADDRESS_CLAMP = 0x1132, 388 CL_ADDRESS_REPEAT = 0x1133, 389 CL_ADDRESS_MIRRORED_REPEAT = 0x1134, 390 } 391 392 // cl_filter_mode 393 enum 394 { 395 CL_FILTER_NEAREST = 0x1140, 396 CL_FILTER_LINEAR = 0x1141, 397 } 398 399 // cl_sampler_info 400 enum 401 { 402 CL_SAMPLER_REFERENCE_COUNT = 0x1150, 403 CL_SAMPLER_CONTEXT = 0x1151, 404 CL_SAMPLER_NORMALIZED_COORDS = 0x1152, 405 CL_SAMPLER_ADDRESSING_MODE = 0x1153, 406 CL_SAMPLER_FILTER_MODE = 0x1154, 407 } 408 409 // cl_map_flags - bitfield 410 enum : cl_bitfield 411 { 412 CL_MAP_READ = (1 << 0), 413 CL_MAP_WRITE = (1 << 1), 414 CL_MAP_WRITE_INVALIDATE_REGION = (1 << 2), 415 } 416 417 // cl_program_info 418 enum 419 { 420 CL_PROGRAM_REFERENCE_COUNT = 0x1160, 421 CL_PROGRAM_CONTEXT = 0x1161, 422 CL_PROGRAM_NUM_DEVICES = 0x1162, 423 CL_PROGRAM_DEVICES = 0x1163, 424 CL_PROGRAM_SOURCE = 0x1164, 425 CL_PROGRAM_BINARY_SIZES = 0x1165, 426 CL_PROGRAM_BINARIES = 0x1166, 427 CL_PROGRAM_NUM_KERNELS = 0x1167, 428 CL_PROGRAM_KERNEL_NAMES = 0x1168, 429 } 430 431 // cl_program_build_info 432 enum 433 { 434 CL_PROGRAM_BUILD_STATUS = 0x1181, 435 CL_PROGRAM_BUILD_OPTIONS = 0x1182, 436 CL_PROGRAM_BUILD_LOG = 0x1183, 437 CL_PROGRAM_BINARY_TYPE = 0x1184, 438 } 439 440 // cl_program_binary_type 441 enum 442 { 443 CL_PROGRAM_BINARY_TYPE_NONE = 0x0, 444 CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT = 0x1, 445 CL_PROGRAM_BINARY_TYPE_LIBRARY = 0x2, 446 CL_PROGRAM_BINARY_TYPE_EXECUTABLE = 0x4, 447 } 448 449 // cl_build_status 450 enum 451 { 452 CL_BUILD_SUCCESS = 0, 453 CL_BUILD_NONE = -1, 454 CL_BUILD_ERROR = -2, 455 CL_BUILD_IN_PROGRESS = -3, 456 } 457 458 // cl_kernel_info 459 enum 460 { 461 CL_KERNEL_FUNCTION_NAME = 0x1190, 462 CL_KERNEL_NUM_ARGS = 0x1191, 463 CL_KERNEL_REFERENCE_COUNT = 0x1192, 464 CL_KERNEL_CONTEXT = 0x1193, 465 CL_KERNEL_PROGRAM = 0x1194, 466 CL_KERNEL_ATTRIBUTES = 0x1195, 467 } 468 469 // cl_kernel_arg_info 470 enum 471 { 472 CL_KERNEL_ARG_ADDRESS_QUALIFIER = 0x1196, 473 CL_KERNEL_ARG_ACCESS_QUALIFIER = 0x1197, 474 CL_KERNEL_ARG_TYPE_NAME = 0x1198, 475 CL_KERNEL_ARG_TYPE_QUALIFIER = 0x1199, 476 CL_KERNEL_ARG_NAME = 0x119A, 477 } 478 479 // cl_kernel_arg_address_qualifier 480 enum 481 { 482 CL_KERNEL_ARG_ADDRESS_GLOBAL = 0x119B, 483 CL_KERNEL_ARG_ADDRESS_LOCAL = 0x119C, 484 CL_KERNEL_ARG_ADDRESS_CONSTANT = 0x119D, 485 CL_KERNEL_ARG_ADDRESS_PRIVATE = 0x119E, 486 } 487 488 // cl_kernel_arg_access_qualifier 489 enum 490 { 491 CL_KERNEL_ARG_ACCESS_READ_ONLY = 0x11A0, 492 CL_KERNEL_ARG_ACCESS_WRITE_ONLY = 0x11A1, 493 CL_KERNEL_ARG_ACCESS_READ_WRITE = 0x11A2, 494 CL_KERNEL_ARG_ACCESS_NONE = 0x11A3, 495 } 496 497 // cl_kernel_arg_type_qualifer 498 enum : cl_bitfield 499 { 500 CL_KERNEL_ARG_TYPE_NONE = 0, 501 CL_KERNEL_ARG_TYPE_CONST = (1 << 0), 502 CL_KERNEL_ARG_TYPE_RESTRICT = (1 << 1), 503 CL_KERNEL_ARG_TYPE_VOLATILE = (1 << 2), 504 } 505 506 // cl_kernel_work_group_info 507 enum 508 { 509 CL_KERNEL_WORK_GROUP_SIZE = 0x11B0, 510 CL_KERNEL_COMPILE_WORK_GROUP_SIZE = 0x11B1, 511 CL_KERNEL_LOCAL_MEM_SIZE = 0x11B2, 512 CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE= 0x11B3, 513 CL_KERNEL_PRIVATE_MEM_SIZE = 0x11B4, 514 CL_KERNEL_GLOBAL_WORK_SIZE = 0x11B5, 515 } 516 517 // cl_event_info 518 enum 519 { 520 CL_EVENT_COMMAND_QUEUE = 0x11D0, 521 CL_EVENT_COMMAND_TYPE = 0x11D1, 522 CL_EVENT_REFERENCE_COUNT = 0x11D2, 523 CL_EVENT_COMMAND_EXECUTION_STATUS = 0x11D3, 524 CL_EVENT_CONTEXT = 0x11D4, 525 } 526 527 // cl_command_type 528 enum 529 { 530 CL_COMMAND_NDRANGE_KERNEL = 0x11F0, 531 CL_COMMAND_TASK = 0x11F1, 532 CL_COMMAND_NATIVE_KERNEL = 0x11F2, 533 CL_COMMAND_READ_BUFFER = 0x11F3, 534 CL_COMMAND_WRITE_BUFFER = 0x11F4, 535 CL_COMMAND_COPY_BUFFER = 0x11F5, 536 CL_COMMAND_READ_IMAGE = 0x11F6, 537 CL_COMMAND_WRITE_IMAGE = 0x11F7, 538 CL_COMMAND_COPY_IMAGE = 0x11F8, 539 CL_COMMAND_COPY_IMAGE_TO_BUFFER = 0x11F9, 540 CL_COMMAND_COPY_BUFFER_TO_IMAGE = 0x11FA, 541 CL_COMMAND_MAP_BUFFER = 0x11FB, 542 CL_COMMAND_MAP_IMAGE = 0x11FC, 543 CL_COMMAND_UNMAP_MEM_OBJECT = 0x11FD, 544 CL_COMMAND_MARKER = 0x11FE, 545 CL_COMMAND_ACQUIRE_GL_OBJECTS = 0x11FF, 546 CL_COMMAND_RELEASE_GL_OBJECTS = 0x1200, 547 CL_COMMAND_READ_BUFFER_RECT = 0x1201, 548 CL_COMMAND_WRITE_BUFFER_RECT = 0x1202, 549 CL_COMMAND_COPY_BUFFER_RECT = 0x1203, 550 CL_COMMAND_USER = 0x1204, 551 CL_COMMAND_BARRIER = 0x1205, 552 CL_COMMAND_MIGRATE_MEM_OBJECTS = 0x1206, 553 CL_COMMAND_FILL_BUFFER = 0x1207, 554 CL_COMMAND_FILL_IMAGE = 0x1208, 555 } 556 557 // cl_command_execution_status 558 enum 559 { 560 CL_COMPLETE = 0x0, 561 CL_RUNNING = 0x1, 562 CL_SUBMITTED = 0x2, 563 CL_QUEUED = 0x3, 564 } 565 566 // cl_buffer_create_type 567 enum 568 { 569 CL_BUFFER_CREATE_TYPE_REGION = 0x1220, 570 } 571 572 // cl_profiling_info 573 enum 574 { 575 CL_PROFILING_COMMAND_QUEUED = 0x1280, 576 CL_PROFILING_COMMAND_SUBMIT = 0x1281, 577 CL_PROFILING_COMMAND_START = 0x1282, 578 CL_PROFILING_COMMAND_END = 0x1283, 579 } 580 581 582 // cl_ext.h 583 584 // cl_khr_fp16 extension 585 enum CL_DEVICE_HALF_FP_CONFIG = 0x1033; 586 587 // cl_APPLE_SetMemObjectDestructor extension 588 enum cl_APPLE_SetMemObjectDestructor = 1; 589 590 // cl_APPLE_ContextLoggingFunctions 591 enum cl_APPLE_ContextLoggingFunctions = 1; 592 593 // cl_khr_icd extension 594 enum cl_khr_icd = 1; 595 // cl_platform_info 596 enum CL_PLATFORM_ICD_SUFFIX_KHR = 0x0920; 597 // Additional Error Codes 598 enum CL_PLATFORM_NOT_FOUND_KHR = -1001; 599 600 // cl_khr_initalize_memory extension 601 enum CL_CONTEXT_MEMORY_INITIALIZE_KHR = 0x200E; 602 603 // cl_khr_terminate_context extension 604 enum cl_khr_terminate_context = 1; 605 enum 606 { 607 CL_DEVICE_TERMINATE_CAPABILITY_KHR = 0x200F, 608 CL_CONTEXT_TERMINATE_KHR = 0x2010, 609 } 610 611 // cl_nv_device_attribute_query extension 612 enum 613 { 614 CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV = 0x4000, 615 CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV = 0x4001, 616 CL_DEVICE_REGISTERS_PER_BLOCK_NV = 0x4002, 617 CL_DEVICE_WARP_SIZE_NV = 0x4003, 618 CL_DEVICE_GPU_OVERLAP_NV = 0x4004, 619 CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV = 0x4005, 620 CL_DEVICE_INTEGRATED_MEMORY_NV = 0x4006, 621 } 622 623 // cl_amd_device_attribute_query extension 624 enum CL_DEVICE_PROFILING_TIMER_OFFSET_AMD = 0x4036; 625 626 // cl_ext_device_fission extension 627 enum cl_ext_device_fission = 1; 628 629 // cl_device_partition_property_ext extension 630 enum 631 { 632 CL_DEVICE_PARTITION_EQUALLY_EXT = 0x4050, 633 CL_DEVICE_PARTITION_BY_COUNTS_EXT = 0x4051, 634 CL_DEVICE_PARTITION_BY_NAMES_EXT = 0x4052, 635 CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT = 0x4053, 636 } 637 638 // clDeviceGetInfo selectors 639 enum 640 { 641 CL_DEVICE_PARENT_DEVICE_EXT = 0x4054, 642 CL_DEVICE_PARTITION_TYPES_EXT = 0x4055, 643 CL_DEVICE_AFFINITY_DOMAINS_EXT = 0x4056, 644 CL_DEVICE_REFERENCE_COUNT_EXT = 0x4057, 645 CL_DEVICE_PARTITION_STYLE_EXT = 0x4058, 646 } 647 648 // error codes 649 enum 650 { 651 CL_DEVICE_PARTITION_FAILED_EXT = -1057, 652 CL_INVALID_PARTITION_COUNT_EXT = -1058, 653 CL_INVALID_PARTITION_NAME_EXT = -1059, 654 } 655 656 // CL_AFFINITY_DOMAINs 657 enum 658 { 659 CL_AFFINITY_DOMAIN_L1_CACHE_EXT = 0x1, 660 CL_AFFINITY_DOMAIN_L2_CACHE_EXT = 0x2, 661 CL_AFFINITY_DOMAIN_L3_CACHE_EXT = 0x3, 662 CL_AFFINITY_DOMAIN_L4_CACHE_EXT = 0x4, 663 CL_AFFINITY_DOMAIN_NUMA_EXT = 0x10, 664 CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT = 0x100, 665 } 666 667 // cl_device_partition_property_ext list terminators 668 enum 669 { 670 CL_PROPERTIES_LIST_END_EXT = (cast(cl_device_partition_property_ext) 0), 671 CL_PARTITION_BY_COUNTS_LIST_END_EXT = (cast(cl_device_partition_property_ext) 0), 672 CL_PARTITION_BY_NAMES_LIST_END_EXT = (cast(cl_device_partition_property_ext) 0 - 1), 673 } 674 675 676 // cl_egl.h 677 678 // Command type for events created with clEnqueueAcquireEGLObjectsKHR 679 enum 680 { 681 CL_COMMAND_EGL_FENCE_SYNC_OBJECT_KHR = 0x202F, 682 CL_COMMAND_ACQUIRE_EGL_OBJECTS_KHR = 0x202D, 683 CL_COMMAND_RELEASE_EGL_OBJECTS_KHR = 0x202E, 684 } 685 686 // Error type for clCreateFromEGLImageKHR 687 enum 688 { 689 CL_INVALID_EGL_OBJECT_KHR = -1093, 690 CL_EGL_RESOURCE_NOT_ACQUIRED_KHR = -1092, 691 } 692 693 // cl_khr_egl_image extension 694 enum cl_khr_egl_image = 1; 695 696 // cl_khr_egl_event extension 697 enum cl_khr_egl_event = 1; 698 699 700 // cl_gl.h 701 702 // cl_gl_object_type 703 enum 704 { 705 CL_GL_OBJECT_BUFFER = 0x2000, 706 CL_GL_OBJECT_TEXTURE2D = 0x2001, 707 CL_GL_OBJECT_TEXTURE3D = 0x2002, 708 CL_GL_OBJECT_RENDERBUFFER = 0x2003, 709 CL_GL_OBJECT_TEXTURE2D_ARRAY = 0x200E, 710 CL_GL_OBJECT_TEXTURE1D = 0x200F, 711 CL_GL_OBJECT_TEXTURE1D_ARRAY = 0x2010, 712 CL_GL_OBJECT_TEXTURE_BUFFER = 0x2011, 713 } 714 715 // cl_gl_texture_info 716 enum 717 { 718 CL_GL_TEXTURE_TARGET = 0x2004, 719 CL_GL_MIPMAP_LEVEL = 0x2005, 720 CL_GL_NUM_SAMPLES = 0x2012, 721 } 722 723 // Additional Error Codes 724 enum CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR = -1000; 725 726 // cl_gl_context_info 727 enum 728 { 729 CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR = 0x2006, 730 CL_DEVICES_FOR_GL_CONTEXT_KHR = 0x2007, 731 } 732 733 // Additional cl_context_properties 734 enum 735 { 736 CL_GL_CONTEXT_KHR = 0x2008, 737 CL_EGL_DISPLAY_KHR = 0x2009, 738 CL_GLX_DISPLAY_KHR = 0x200A, 739 CL_WGL_HDC_KHR = 0x200B, 740 CL_CGL_SHAREGROUP_KHR = 0x200C, 741 } 742 743 // cl_khr_gl_sharing extension 744 enum cl_khr_gl_sharing = 1; 745 746 747 // cl_gl_ext.h 748 749 // cl_khr_gl_event extension 750 enum CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR = 0x200D; 751 752 753 // cl_d3d10.h 754 755 // cl_khr_d3d10_sharing extension 756 enum cl_khr_d3d10_sharing = 1; 757 758 // Error Codes 759 enum 760 { 761 CL_INVALID_D3D10_DEVICE_KHR = -1002, 762 CL_INVALID_D3D10_RESOURCE_KHR = -1003, 763 CL_D3D10_RESOURCE_ALREADY_ACQUIRED_KHR = -1004, 764 CL_D3D10_RESOURCE_NOT_ACQUIRED_KHR = -1005, 765 } 766 767 // cl_d3d10_device_source_nv 768 enum 769 { 770 CL_D3D10_DEVICE_KHR = 0x4010, 771 CL_D3D10_DXGI_ADAPTER_KHR = 0x4011, 772 } 773 774 // cl_d3d10_device_set_nv 775 enum 776 { 777 CL_PREFERRED_DEVICES_FOR_D3D10_KHR = 0x4012, 778 CL_ALL_DEVICES_FOR_D3D10_KHR = 0x4013, 779 } 780 781 // cl_context_info 782 enum 783 { 784 CL_CONTEXT_D3D10_DEVICE_KHR = 0x4014, 785 CL_CONTEXT_D3D10_PREFER_SHARED_RESOURCES_KHR = 0x402C, 786 } 787 788 // cl_mem_info 789 enum CL_MEM_D3D10_RESOURCE_KHR = 0x4015; 790 791 // cl_image_info 792 enum CL_IMAGE_D3D10_SUBRESOURCE_KHR = 0x4016; 793 794 // cl_command_type 795 enum CL_COMMAND_ACQUIRE_D3D10_OBJECTS_KHR = 0x4017; 796 enum CL_COMMAND_RELEASE_D3D10_OBJECTS_KHR = 0x4018; 797 798 799 // cl_d3d11.h 800 801 // cl_khr_d3d11_sharing extension 802 enum cl_khr_d3d11_sharing = 1; 803 804 // Error Codes 805 enum 806 { 807 CL_INVALID_D3D11_DEVICE_KHR = -1006, 808 CL_INVALID_D3D11_RESOURCE_KHR = -1007, 809 CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR = -1008, 810 CL_D3D11_RESOURCE_NOT_ACQUIRED_KHR = -1009, 811 } 812 813 // cl_d3d11_device_source 814 enum 815 { 816 CL_D3D11_DEVICE_KHR = 0x4019, 817 CL_D3D11_DXGI_ADAPTER_KHR = 0x401A, 818 } 819 820 // cl_d3d11_device_set 821 enum 822 { 823 CL_PREFERRED_DEVICES_FOR_D3D11_KHR = 0x401B, 824 CL_ALL_DEVICES_FOR_D3D11_KHR = 0x401C, 825 } 826 827 // cl_context_info 828 enum 829 { 830 CL_CONTEXT_D3D11_DEVICE_KHR = 0x401D, 831 CL_CONTEXT_D3D11_PREFER_SHARED_RESOURCES_KHR = 0x402D, 832 } 833 834 // cl_mem_info 835 enum CL_MEM_D3D11_RESOURCE_KHR = 0x401E; 836 837 // cl_image_info 838 enum CL_IMAGE_D3D11_SUBRESOURCE_KHR = 0x401F; 839 840 // cl_command_type 841 enum 842 { 843 CL_COMMAND_ACQUIRE_D3D11_OBJECTS_KHR = 0x4020, 844 CL_COMMAND_RELEASE_D3D11_OBJECTS_KHR = 0x4021, 845 } 846 847 848 // cl_dx9_media_sharing.h extension 849 850 // cl_khr_dx9_media_sharing 851 enum cl_khr_dx9_media_sharing = 1; 852 853 // Error Codes 854 enum 855 { 856 CL_INVALID_DX9_MEDIA_ADAPTER_KHR = -1010, 857 CL_INVALID_DX9_MEDIA_SURFACE_KHR = -1011, 858 CL_DX9_MEDIA_SURFACE_ALREADY_ACQUIRED_KHR = -1012, 859 CL_DX9_MEDIA_SURFACE_NOT_ACQUIRED_KHR = -1013, 860 } 861 862 // cl_media_adapter_type_khr 863 enum 864 { 865 CL_ADAPTER_D3D9_KHR = 0x2020, 866 CL_ADAPTER_D3D9EX_KHR = 0x2021, 867 CL_ADAPTER_DXVA_KHR = 0x2022, 868 } 869 870 // cl_media_adapter_set_khr 871 enum 872 { 873 CL_PREFERRED_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR = 0x2023, 874 CL_ALL_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR = 0x2024, 875 } 876 877 // cl_context_info 878 enum 879 { 880 CL_CONTEXT_ADAPTER_D3D9_KHR = 0x2025, 881 CL_CONTEXT_ADAPTER_D3D9EX_KHR = 0x2026, 882 CL_CONTEXT_ADAPTER_DXVA_KHR = 0x2027, 883 } 884 885 // cl_mem_info 886 enum 887 { 888 CL_MEM_DX9_MEDIA_ADAPTER_TYPE_KHR = 0x2028, 889 CL_MEM_DX9_MEDIA_SURFACE_INFO_KHR = 0x2029, 890 } 891 892 // cl_image_info 893 enum CL_IMAGE_DX9_MEDIA_PLANE_KHR = 0x202A; 894 895 // cl_command_type 896 enum 897 { 898 CL_COMMAND_ACQUIRE_DX9_MEDIA_SURFACES_KHR = 0x202B, 899 CL_COMMAND_RELEASE_DX9_MEDIA_SURFACES_KHR = 0x202C, 900 } 901 902 903 // cl_platform.h 904 905 /* Macro names and corresponding values defined by OpenCL */ 906 enum CL_CHAR_BIT = 8; 907 enum CL_SCHAR_MAX = 127; 908 enum CL_SCHAR_MIN = (-127-1); 909 enum CL_CHAR_MAX = CL_SCHAR_MAX; 910 enum CL_CHAR_MIN = CL_SCHAR_MIN; 911 enum CL_UCHAR_MAX = 255; 912 enum CL_SHRT_MAX = 32767; 913 enum CL_SHRT_MIN = (-32767-1); 914 enum CL_USHRT_MAX = 65535; 915 enum CL_INT_MAX = 2147483647; 916 enum CL_INT_MIN = (-2147483647-1); 917 enum CL_UINT_MAX = 0xffffffffU; 918 enum CL_LONG_MAX = (cast(cl_long) 0x7FFFFFFFFFFFFFFF); 919 enum CL_LONG_MIN = (cast(cl_long) -0x7FFFFFFFFFFFFFFF - 1); 920 enum CL_ULONG_MAX = (cast(cl_ulong) 0xFFFFFFFFFFFFFFFF); 921 922 enum CL_FLT_DIG = 6; 923 enum CL_FLT_MANT_DIG = 24; 924 enum CL_FLT_MAX_10_EXP = +38; 925 enum CL_FLT_MAX_EXP = +128; 926 enum CL_FLT_MIN_10_EXP = -37; 927 enum CL_FLT_MIN_EXP = -125; 928 enum CL_FLT_RADIX = 2; 929 930 enum CL_FLT_MAX = float.max; 931 enum CL_FLT_MIN = float.min_normal; 932 enum CL_FLT_EPSILON = 0x1.0p-23f; 933 934 enum CL_DBL_DIG = 15; 935 enum CL_DBL_MANT_DIG = 53; 936 enum CL_DBL_MAX_10_EXP = +308; 937 enum CL_DBL_MAX_EXP = +1024; 938 enum CL_DBL_MIN_10_EXP = -307; 939 enum CL_DBL_MIN_EXP = -1021; 940 enum CL_DBL_RADIX = 2; 941 942 enum CL_DBL_MAX = double.max; 943 enum CL_DBL_MIN = double.min_normal; 944 enum CL_DBL_EPSILON = double.epsilon; 945 946 enum CL_M_E = 2.718281828459045090796; 947 enum CL_M_LOG2E = 1.442695040888963387005; 948 enum CL_M_LOG10E = 0.434294481903251816668; 949 enum CL_M_LN2 = 0.693147180559945286227; 950 enum CL_M_LN10 = 2.302585092994045901094; 951 enum CL_M_PI = 3.141592653589793115998; 952 enum CL_M_PI_2 = 1.570796326794896557999; 953 enum CL_M_PI_4 = 0.785398163397448278999; 954 enum CL_M_1_PI = 0.318309886183790691216; 955 enum CL_M_2_PI = 0.636619772367581382433; 956 enum CL_M_2_SQRTPI = 1.128379167095512558561; 957 enum CL_M_SQRT2 = 1.414213562373095145475; 958 enum CL_M_SQRT1_2 = 0.707106781186547572737; 959 960 enum CL_M_E_F = 2.71828174591064f; 961 enum CL_M_LOG2E_F = 1.44269502162933f; 962 enum CL_M_LOG10E_F = 0.43429449200630f; 963 enum CL_M_LN2_F = 0.69314718246460f; 964 enum CL_M_LN10_F = 2.30258512496948f; 965 enum CL_M_PI_F = 3.14159274101257f; 966 enum CL_M_PI_2_F = 1.57079637050629f; 967 enum CL_M_PI_4_F = 0.78539818525314f; 968 enum CL_M_1_PI_F = 0.31830987334251f; 969 enum CL_M_2_PI_F = 0.63661974668503f; 970 enum CL_M_2_SQRTPI_F = 1.12837922573090f; 971 enum CL_M_SQRT2_F = 1.41421353816986f; 972 enum CL_M_SQRT1_2_F = 0.70710676908493f; 973 974 enum CL_NAN = cl_float.nan; 975 enum CL_HUGE_VALF = cl_float.infinity; 976 enum CL_HUGE_VAL = cl_double.infinity; 977 enum CL_MAXFLOAT = CL_FLT_MAX; 978 enum CL_INFINITY = CL_HUGE_VALF; 979 980 981 // generate code for the CL vector types 982 // this might look crazy, but eases further changes 983 // do a pragma(msg, genCLVectorTypes()); for debugging 984 import std.conv; 985 version(GNU) import gcc.attribute; 986 987 // TODO: finish compiler-specific vector types, e.g. __attribute__((vector_size(16))); for GDC 988 // TODO: CPU instruction sets-specific alignment (MMX, SSE*, AVX) 989 private string genCLVectorTypes() 990 { 991 string res; 992 foreach(type; ["cl_char", "cl_uchar", "cl_short", "cl_ushort", "cl_int", "cl_uint", "cl_long", "cl_ulong", "cl_float", "cl_double"]) 993 { 994 res ~= "alias " ~ type ~ "4 " ~ type ~ "3;"; // cl_xx3 is identical in size, alignment and behavior to cl_xx4. See section 6.1.5. of the spec 995 // now add the rest of the types 996 foreach (size; [2,4,8,16]) 997 { 998 res ~= ` 999 union ` ~ type ~ to!string(size) ~ ` 1000 { 1001 `; 1002 // add aligned attribute if inside GDC 1003 version(GNU) res ~= `@attribute("aligned", (` ~ to!string(size) ~ ` * ` ~ type ~ `.sizeof).to!string) `; 1004 res ~= type ~ "[" ~ to!string(size) ~ `] s; 1005 alias s this; // allow array access and implicit conversion to the array 1006 struct { ` ~ type ~ ` x, y` ~ (size<=2 ? "" : ", z, w") ~ (size>=16 ? ", __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf" : "") ~ `; } 1007 struct { ` ~ type ~ ` s0, s1` ~ (size<=2 ? "" : ", s2, s3") ~ (size>=8 ? ", s4, s5, s6, s7" : "") ~ (size>=16 ? ", s8, s9, sA, sB, sC, sD, sE, sF" : "") ~ `; } 1008 struct { ` ~ type ~ (size>2 ? to!string(size/2) : "") ~ ` lo, hi; }`; 1009 version(GNU) res ~= ` 1010 @attribute("vector_size", (` ~ to!string(size) ~ ` * ` ~ type ~ `.sizeof).to!string) ` ~ type ~ " v" ~ to!string(size) ~ `;`; 1011 res ~= ` 1012 } 1013 `; 1014 } 1015 } 1016 1017 return res; 1018 } 1019 1020 //pragma(msg, genCLVectorTypes()); 1021 mixin(genCLVectorTypes()); 1022 // NOTE: There are no vector types for half 1023 1024 1025 /** 1026 * Macro to facilitate debugging 1027 * Usage: 1028 * Place mixin(CL_PROGRAM_STRING_DEBUG_INFO) on the line before the first line of your source. 1029 * The first line ends with: CL_PROGRAM_STRING_BEGIN \" 1030 * Each line thereafter of OpenCL C source must have a line end 1031 * The last line is empty; 1032 * 1033 * Example: 1034 * 1035 * string code = mixin(CL_PROGRAM_STRING_DEBUG_INFO) ~ q{ 1036 * kernel void foo( int a, float * b ) 1037 * { 1038 * // my comment 1039 * *b[ get_global_id(0)] = a; 1040 * } 1041 * }; 1042 * 1043 * This should correctly set up the line, (column) and file information for your source 1044 * string so you can do source level debugging. 1045 */ 1046 1047 // Workaround: OpenCL expects Linux dir separators ("unrecognized character escape sequence") 1048 // Usage: createProgram( CL_PROGRAM_STRING_DEBUG_INFO(__LINE__, __FILE__) ~ q{ __kernel code }); 1049 import std..string; 1050 1051 string CL_PROGRAM_STRING_DEBUG_INFO(size_t line = __LINE__, string file = __FILE__) 1052 { 1053 string ret = ""; 1054 1055 debug 1056 { 1057 file = tr(file, "\\", "/"); 1058 ret = "#line " ~ to!string(line) ~ " \"" ~ file ~ "\"" ~ "\n\n"; 1059 } 1060 1061 return ret; 1062 }